package com.example.controller;

import java.util.UUID;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.example.entity.ResponseResult;
import com.example.entity.RestResultGenerator;
import com.example.entity.User;

@Controller
public class LoginController {
	@RequestMapping("/login")
    @ResponseBody
    public ResponseResult<User> UserLogin(User user,HttpServletRequest request, HttpServletResponse response) {
		//用来存放返回值结果json
		ResponseResult<User> result ; 
        //参数有效性校验
        if (user == null) {
        	result = RestResultGenerator.result(user, false, "校验内容类型不能为空");
            return result;
        }
        //调用用户登录服务
        User u = null;
        try {
        	// 1、判断用户名密码是否正确。正确返回user，这里省略数据库比对用户名密码
            u = new User().setUserName("张山").setUserId(UUID.randomUUID().toString().replaceAll("-", "")).setUseramount(1234L);

        } catch (Exception e) {
            result = RestResultGenerator.result(user, false, "用户登录失败请重新登录");
        }

        if (null != u) {
        	// 2、登录成功后生成token。
        	String token = UUID.randomUUID().toString();
        	 // 3、把用户信息保存到redis。Key就是token，value就是TbUser对象转换成json。
            // 4、使用String类型保存Session信息。可以使用“前缀:token”为key
            user.setPassword(null);
            jedisClient.set("USER_INFO" + ":" + token, JsonUtils.objectToJson(user));
            // 5、设置key的过期时间。模拟Session的过期时间。一般半个小时。
            jedisClient.expire("USER_INFO" + ":" + token, SESSION_EXPIRE);
            //6.设置cookie的key和value，key随便字符串，value为token值
            CookieUtils.setCookie(request, response, "COOKIE_TOKEN_KEY", token);
            
            //配合shiro中的doGetAuthenticationInfo身份认证方法  通过获取cookie中的token获取用户信息来判断用户是否登录
            //每次访问还要对redis中的用户信息进行续期操作
            return RestResultGenerator.result(user, true, "登录成功");
        } else {
            return RestResultGenerator.result(user, false, "帐号密码错误");
        }
    }
}
